Marina Lambrini Diamandis é uma cantora e compositora galesa de descendência grega, que atende pelo nome artístico de Marina and the Diamonds (trocadilho com seu sobrenome), cujo estilo musical vagueia entre Indie pop, synth-pop e new wave. A cantora possui 3 álbuns em sua discografia, e cada um deles denota uma “era” diferente da artista.

Suas músicas falam sobre situações facilmente identificáveis à qualquer pessoa, mas sem soar clichê, narrando de decepções amorosas e problemas em relacionamentos a questionamentos sobre a vida e sobre a sociedade, conquistando vários ouvintes ao longo de sua carreira.

Sabendo que a artista tem algumas músicas de sucesso, mas não é considerada um nome forte do mercado musical, seria possível identificar alguma característica em comum em suas músicas mais populares?

O Spotify possibilita, com sua API, uma forma de analisar essas características. A partir da análise do áudio da música, é possível quantificar o quão acústica ela é, se ela é muito ou pouco enérgica, entre outras características. Uma dessas características é bastante interessante para responder o questionamento feito anteriormente: a valência. A valência mede a positividade transmitida por uma música. Assim, músicas com valência alta soam mais felizes, e com valência baixa soam mais tristes. Uma descrição melhor desses atributos pode ser encontrado aqui.

Analisaremos, então, utilizando dados fornecidos pelo Spotify, como a valência e outras caracterísicas das músicas de Marina and the Diamonds se relacionam, e como essas afetam sua popularidade.

Importando os dados

Os dados que serão utilizados foram importados a partir da API do Spotify através do pacote spotifyr. Como existem diferentes versões dos mesmos álbuns na base de dados, vamos filtrar apenas os dados de músicas que pertencem às versões normais dos álbuns da cantora.

musicas = read_csv(here::here("data/marina.csv")) %>% 
    filter(album_name %in% c("The Family Jewels", 
                             "Electra Heart", 
                             "FROOT"))

Existe alguma relação entre a valência de uma música e sua popularidade?

musicas %>% 
    mutate(Valência = valence) %>% 
    plot_ly(x = ~album_name,
            y = ~track_popularity,
            size = ~Valência,
            color = ~Valência,
            text = ~paste("Música: ", track_name, 
                          '<br>Álbum: ', album_name,
                          '<br>Valência: ', Valência,
                          '<br>Popularidade: ', track_popularity),
            type = 'scatter') %>% 
    layout(title = "Relação entre valência e popularidade das músicas",
           titlefont = list(size = 12), 
           xaxis = list(title = "Álbum",
                        titlefont = list(size = 12)),
           yaxis = list(title = "Valência",
                        titlefont = list(size = 12)))

No gráfico acima, quanto maior e mais amarela for cada bolinha, maior é o valor da valência da música, ou seja, mais alegre a música é. Podemos observar, entre as músicas com popularidade mais alta, uma predominâcia de cor amarela/verde, e que as bolinhas de cor mais escura estão mais abaixo no gráfico, com popularidade menor. Isso indica que existe sim uma associação entre a valência e a popularidade da música. Para verificar a força dessa associação, vamos verificar qual o valor da correlação linear entre as duas variáveis.

O valor da correlação linear é um valor entre -1 e +1. Quanto mais próximo de 1 for seu valor absoluto, mais forte é associação entre as variáveis. O sinal identifica o sentido da associação, ou seja, se os valores de uma variável influenciam positiva ou negativamente os valores da outra variável.

cor(x = musicas$valence, y = musicas$track_popularity, method = "pearson")
[1] 0.4720178

Para as músicas analisadas, o valor de correção entre sua valência e popularidade foi de 0.47, que indica uma associação positiva não tão forte, mas significativa. Ou seja, quanto mais alegre uma música, mais popular ela é.

No gráfico acima algumas músicas fogem a esta regra. É possível observar que existem músicas mais alegres com uma baixa popularidade, e músicas mais tristes com uma popularidade razoável. Vamos examinar mais de perto as músicas mais populares.

Como é a valência das 10 músicas mais populares?

Observando as 10 mais populares, vemos que a maioria delas são mais alegres, de acordo com o valor de valência. Porém, a música Happy, possui um valor muito baixo de valência, ou seja, é uma música triste, e ainda está entre as 10 com maior popularidade.

Há algumas curiosidades que valem a pena ser apontadas nesta música. Pelo título, sem ouvir a música, poderíamos assumir que a música seria mais alegre e possuiria um valor maior de valência, mas não é o que acontece aqui. A música possui valência de 0.0885, e, ao ouvir a música, percebe-se o porquê. Trata-se de uma das baladas da carreira da cantora, e foi a segunda música lançada de seu terceiro disco, FROOT. Aqui, mais uma vez, Marina foge do clichê. A música Happy, de melodia triste, fala sim sobre felicidade, mas de uma forma triste, o que caiu no gosto de seus ouvintes, e fez dessa uma das músicas mais populares da carreira da cantora.

Quais dos álbuns da cantora pode ser considerado o mais triste de sua carreira? E o mais feliz?

Aqui novamente podemos usar a valência das músicas em nosso favor, mas nesse caso precisaremos de um valor para o álbum. Vamos utilizar a mediana da valência entre as músicas de um mesmo álbum como a valência deste álbum. Escolheremos a mediana, pois a mesma não é afetada por valores extremos, e representa o valor que divide as observações em duas partes iguais: uma apenas com valores menores que a mediana, e outra com valores maiores.

musicas %>% 
    group_by(album_name) %>% 
    summarise(mediana = median(valence)) %>% 
    mutate(valence_album = mediana) %>% 
    ungroup() %>% 
    select(album_name, valence_album) %>% 
    plot_ly(x = ~valence_album,
            y = ~album_name, 
            color = ~album_name,
            text = ~paste('Valência: ', valence_album),
            type = 'bar') %>% 
    layout(title = "Valência por álbum",
           titlefont = list(size = 12), 
           xaxis = list(title = "Valência",
                        titlefont = list(size = 12)),
           yaxis = list(title = "Álbum",
                        titlefont = list(size = 12)))

Pelo valor da mediana de valência das músicas do álbum, podemos concluir que o álbum mais alegre de Marina and the Diamonds é The Family Jewels, seu debut, e o mais triste é Electra Heart.

Aqui, mais uma coisa curiosa acontece.

O álbum Electra Heart foi o responsável por aumentar a popularidade da cantora, e é reconhecido pela forte influência eletrônica e alta energia das músicas. O que explicaria então um valor tão baixo de valência?

Vamos, inicialmente, ver a valência das músicas do álbum.

musicas %>% 
    filter(album_name == "Electra Heart") %>%
    plot_ly(x = ~valence,
            y = ~track_name,
            color = ~valence,
            text = ~paste('Valência: ', valence),
            size = ~valence, 
            type = 'scatter') %>% 
    layout(title = "Valência das músicas do Electra Heart",
           titlefont = list(size = 12), 
           xaxis = list(title = "Valência",
                        titlefont = list(size = 12)),
           yaxis = list(title = "Música",
                        titlefont = list(size = 12)))

A partir deste gráfico é possível entender um valor tão baixo de mediana, pois metade das músicas possui uma valência menor que 0.4. Mas, entre essas músicas de baixa valência, encontram-se músicas mais agitadas, com forte influência eletrônica. Até que ponto a energia de uma música influência sua valência?

Existe alguma relação entre a energia de uma música e sua valência?

musicas %>% 
    plot_ly(x = ~valence, 
            y = ~energy,
            color = ~album_name, 
            type = 'scatter',
            text = ~paste('Energia: ', energy,
                          'Música: ', track_name)) %>% 
    layout(title = "Relação entre energia e valência das músicas",
           titlefont = list(size = 12), 
           xaxis = list(title = "Valência",
                        titlefont = list(size = 12)),
           yaxis = list(title = "Energia",
                        titlefont = list(size = 12)))

Pela distribuição dos dados, é possível ver identificar alguma linearidade. Vemos que quanto maior a energia, maior a valência. Vamos, novamente, usar da correlação linear para classificar melhor essa associação.

cor(x = musicas$energy, musicas$valence, method = "pearson")
[1] 0.6104095

A correlação entre as variáveis é de aproximadamente 0.61, ou seja, a associação é moderamente forte, confirmando o que identificamos no gráfico anterior.

Aqui, podemos concluir que, apesar da forte influência eletrônica e da associação entre a energia e a valência das músicas, o álbum Electra Heart é o mais triste entre os álbuns de Marina, dado que uma boa parte das músicas do álbum possuem uma valência mais baixa e a medida utilizada para medir a valência do álbum foi a mediana da valência de suas músicas.

LS0tCnRpdGxlOiAiTWFyaW5hIGUgc2V1cyBkaWFtYW50ZXMuIgphdXRob3I6ICJWYWx0ZXIgTHVjZW5hIgpkYXRlOiAyMDE4LTA1LTI1Cm91dHB1dDoKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IHllcwogICAgdG9jX2Zsb2F0OiB5ZXMKICBodG1sX25vdGVib29rOgogICAgdG9jOiB5ZXMKICAgIHRvY19mbG9hdDogeWVzCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkodmlyaWRpcykKbGlicmFyeShoZXJlKQpsaWJyYXJ5KGx1YnJpZGF0ZSkKbGlicmFyeShwbG90bHkpCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpCmBgYAoKTWFyaW5hIExhbWJyaW5pIERpYW1hbmRpcyDDqSB1bWEgY2FudG9yYSBlIGNvbXBvc2l0b3JhIGdhbGVzYSBkZSBkZXNjZW5kw6puY2lhIGdyZWdhLCBxdWUgYXRlbmRlIHBlbG8gbm9tZSBhcnTDrXN0aWNvIGRlIE1hcmluYSBhbmQgdGhlIERpYW1vbmRzICh0cm9jYWRpbGhvIGNvbSBzZXUgc29icmVub21lKSwgY3VqbyBlc3RpbG8gbXVzaWNhbCB2YWd1ZWlhIGVudHJlICpJbmRpZSBwb3AqLCAqc3ludGgtcG9wKiBlICpuZXcgd2F2ZSouIEEgY2FudG9yYSBwb3NzdWkgMyDDoWxidW5zIGVtIHN1YSBkaXNjb2dyYWZpYSwgZSBjYWRhIHVtIGRlbGVzIGRlbm90YSB1bWEgImVyYSIgZGlmZXJlbnRlIGRhIGFydGlzdGEuIAoKU3VhcyBtw7pzaWNhcyBmYWxhbSBzb2JyZSBzaXR1YcOnw7VlcyBmYWNpbG1lbnRlIGlkZW50aWZpY8OhdmVpcyDDoCBxdWFscXVlciBwZXNzb2EsIG1hcyBzZW0gc29hciBjbGljaMOqLCBuYXJyYW5kbyBkZSBkZWNlcMOnw7VlcyBhbW9yb3NhcyBlIHByb2JsZW1hcyBlbSByZWxhY2lvbmFtZW50b3MgYSBxdWVzdGlvbmFtZW50b3Mgc29icmUgYSB2aWRhIGUgc29icmUgYSBzb2NpZWRhZGUsIGNvbnF1aXN0YW5kbyB2w6FyaW9zIG91dmludGVzIGFvIGxvbmdvIGRlIHN1YSBjYXJyZWlyYS4KClNhYmVuZG8gcXVlIGEgYXJ0aXN0YSB0ZW0gYWxndW1hcyBtw7pzaWNhcyBkZSBzdWNlc3NvLCBtYXMgbsOjbyDDqSBjb25zaWRlcmFkYSB1bSBub21lIGZvcnRlIGRvIG1lcmNhZG8gbXVzaWNhbCwgc2VyaWEgcG9zc8OtdmVsIGlkZW50aWZpY2FyIGFsZ3VtYSBjYXJhY3RlcsOtc3RpY2EgZW0gY29tdW0gZW0gc3VhcyBtw7pzaWNhcyBtYWlzIHBvcHVsYXJlcz8KCk8gW1Nwb3RpZnldKGh0dHBzOi8vd3d3LnNwb3RpZnkuY29tKSBwb3NzaWJpbGl0YSwgY29tIHN1YSBBUEksIHVtYSBmb3JtYSBkZSBhbmFsaXNhciBlc3NhcyBjYXJhY3RlcsOtc3RpY2FzLiBBIHBhcnRpciBkYSBhbsOhbGlzZSBkbyDDoXVkaW8gZGEgbcO6c2ljYSwgw6kgcG9zc8OtdmVsIHF1YW50aWZpY2FyIG8gcXXDo28gYWPDunN0aWNhIGVsYSDDqSwgc2UgZWxhIMOpIG11aXRvIG91IHBvdWNvIGVuw6lyZ2ljYSwgZW50cmUgb3V0cmFzIGNhcmFjdGVyw61zdGljYXMuIFVtYSBkZXNzYXMgY2FyYWN0ZXLDrXN0aWNhcyDDqSBiYXN0YW50ZSBpbnRlcmVzc2FudGUgcGFyYSByZXNwb25kZXIgbyBxdWVzdGlvbmFtZW50byBmZWl0byBhbnRlcmlvcm1lbnRlOiBhIHZhbMOqbmNpYS4gQSB2YWzDqm5jaWEgbWVkZSBhIHBvc2l0aXZpZGFkZSB0cmFuc21pdGlkYSBwb3IgdW1hIG3DunNpY2EuIEFzc2ltLCBtw7pzaWNhcyBjb20gdmFsw6puY2lhIGFsdGEgc29hbSBtYWlzIGZlbGl6ZXMsIGUgY29tIHZhbMOqbmNpYSBiYWl4YSBzb2FtIG1haXMgdHJpc3Rlcy4gVW1hIGRlc2NyacOnw6NvIG1lbGhvciBkZXNzZXMgYXRyaWJ1dG9zIHBvZGUgc2VyIGVuY29udHJhZG8gW2FxdWldKGh0dHBzOi8vYmV0YS5kZXZlbG9wZXIuc3BvdGlmeS5jb20vZG9jdW1lbnRhdGlvbi93ZWItYXBpL3JlZmVyZW5jZS9vYmplY3QtbW9kZWwvI2F1ZGlvLWZlYXR1cmVzLW9iamVjdCkuIAoKQW5hbGlzYXJlbW9zLCBlbnTDo28sIHV0aWxpemFuZG8gZGFkb3MgZm9ybmVjaWRvcyBwZWxvICpTcG90aWZ5KiwgY29tbyBhIHZhbMOqbmNpYSBlIG91dHJhcyBjYXJhY3RlcsOtc2ljYXMgZGFzIG3DunNpY2FzIGRlIE1hcmluYSBhbmQgdGhlIERpYW1vbmRzIHNlIHJlbGFjaW9uYW0sIGUgY29tbyBlc3NhcyBhZmV0YW0gc3VhIHBvcHVsYXJpZGFkZS4KCiMgSW1wb3J0YW5kbyBvcyBkYWRvcwoKT3MgZGFkb3MgcXVlIHNlcsOjbyB1dGlsaXphZG9zIGZvcmFtIGltcG9ydGFkb3MgYSBwYXJ0aXIgZGEgQVBJIGRvICpTcG90aWZ5KiBhdHJhdsOpcyBkbyBwYWNvdGUgW3Nwb3RpZnlyXShodHRwczovL2dpdGh1Yi5jb20vY2hhcmxpZTg2L3Nwb3RpZnlyKS4gQ29tbyBleGlzdGVtIGRpZmVyZW50ZXMgdmVyc8O1ZXMgZG9zIG1lc21vcyDDoWxidW5zIG5hIGJhc2UgZGUgZGFkb3MsIHZhbW9zIGZpbHRyYXIgYXBlbmFzIG9zIGRhZG9zIGRlIG3DunNpY2FzIHF1ZSBwZXJ0ZW5jZW0gw6BzIHZlcnPDtWVzIG5vcm1haXMgZG9zIMOhbGJ1bnMgZGEgY2FudG9yYS4KCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm11c2ljYXMgPSByZWFkX2NzdihoZXJlOjpoZXJlKCJkYXRhL21hcmluYS5jc3YiKSkgJT4lIAogICAgZmlsdGVyKGFsYnVtX25hbWUgJWluJSBjKCJUaGUgRmFtaWx5IEpld2VscyIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbGVjdHJhIEhlYXJ0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZST09UIikpCmBgYAoKIyBFeGlzdGUgYWxndW1hIHJlbGHDp8OjbyBlbnRyZSBhIHZhbMOqbmNpYSBkZSB1bWEgbcO6c2ljYSBlIHN1YSBwb3B1bGFyaWRhZGU/CgpgYGB7ciB3YXJuaW5nPUZBTFNFfSAKbXVzaWNhcyAlPiUgCiAgICBtdXRhdGUoVmFsw6puY2lhID0gdmFsZW5jZSkgJT4lIAogICAgcGxvdF9seSh4ID0gfmFsYnVtX25hbWUsCiAgICAgICAgICAgIHkgPSB+dHJhY2tfcG9wdWxhcml0eSwKICAgICAgICAgICAgc2l6ZSA9IH5WYWzDqm5jaWEsCiAgICAgICAgICAgIGNvbG9yID0gflZhbMOqbmNpYSwKICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgiTcO6c2ljYTogIiwgdHJhY2tfbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxicj7DgWxidW06ICcsIGFsYnVtX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJzxicj5WYWzDqm5jaWE6ICcsIFZhbMOqbmNpYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnPGJyPlBvcHVsYXJpZGFkZTogJywgdHJhY2tfcG9wdWxhcml0eSksCiAgICAgICAgICAgIHR5cGUgPSAnc2NhdHRlcicpICU+JSAKICAgIGxheW91dCh0aXRsZSA9ICJSZWxhw6fDo28gZW50cmUgdmFsw6puY2lhIGUgcG9wdWxhcmlkYWRlIGRhcyBtw7pzaWNhcyIsCiAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLCAKICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiw4FsYnVtIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpKSwKICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiVmFsw6puY2lhIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpKSkKCmBgYAoKTm8gZ3LDoWZpY28gYWNpbWEsIHF1YW50byBtYWlvciBlICBtYWlzIGFtYXJlbGEgZm9yIGNhZGEgYm9saW5oYSwgbWFpb3Igw6kgbyB2YWxvciBkYSB2YWzDqm5jaWEgZGEgbcO6c2ljYSwgb3Ugc2VqYSwgbWFpcyBhbGVncmUgYSBtw7pzaWNhIMOpLiBQb2RlbW9zIG9ic2VydmFyLCBlbnRyZSBhcyBtw7pzaWNhcyBjb20gcG9wdWxhcmlkYWRlIG1haXMgYWx0YSwgdW1hIHByZWRvbWluw6JjaWEgZGUgY29yIGFtYXJlbGEvdmVyZGUsIGUgcXVlIGFzIGJvbGluaGFzIGRlIGNvciBtYWlzIGVzY3VyYSBlc3TDo28gbWFpcyBhYmFpeG8gbm8gZ3LDoWZpY28sIGNvbSBwb3B1bGFyaWRhZGUgbWVub3IuIElzc28gaW5kaWNhIHF1ZSBleGlzdGUgc2ltIHVtYSBhc3NvY2lhw6fDo28gZW50cmUgYSB2YWzDqm5jaWEgZSBhIHBvcHVsYXJpZGFkZSBkYSBtw7pzaWNhLiBQYXJhIHZlcmlmaWNhciBhIGZvcsOnYSBkZXNzYSBhc3NvY2lhw6fDo28sIHZhbW9zIHZlcmlmaWNhciBxdWFsIG8gdmFsb3IgZGEgY29ycmVsYcOnw6NvIGxpbmVhciBlbnRyZSBhcyBkdWFzIHZhcmnDoXZlaXMuIAoKTyB2YWxvciBkYSBjb3JyZWxhw6fDo28gbGluZWFyIMOpIHVtIHZhbG9yIGVudHJlIC0xIGUgKzEuIFF1YW50byBtYWlzIHByw7N4aW1vIGRlIDEgZm9yIHNldSB2YWxvciBhYnNvbHV0bywgbWFpcyBmb3J0ZSDDqSBhc3NvY2lhw6fDo28gZW50cmUgYXMgdmFyacOhdmVpcy4gTyBzaW5hbCBpZGVudGlmaWNhIG8gc2VudGlkbyBkYSBhc3NvY2lhw6fDo28sIG91IHNlamEsIHNlIG9zIHZhbG9yZXMgZGUgdW1hIHZhcmnDoXZlbCBpbmZsdWVuY2lhbSBwb3NpdGl2YSBvdSBuZWdhdGl2YW1lbnRlIG9zIHZhbG9yZXMgZGEgb3V0cmEgdmFyacOhdmVsLiAKCmBgYHtyfQpjb3IoeCA9IG11c2ljYXMkdmFsZW5jZSwgeSA9IG11c2ljYXMkdHJhY2tfcG9wdWxhcml0eSwgbWV0aG9kID0gInBlYXJzb24iKQpgYGAKClBhcmEgYXMgbcO6c2ljYXMgYW5hbGlzYWRhcywgbyB2YWxvciBkZSBjb3JyZcOnw6NvIGVudHJlIHN1YSB2YWzDqm5jaWEgZSBwb3B1bGFyaWRhZGUgZm9pIGRlIDAuNDcsIHF1ZSBpbmRpY2EgdW1hIGFzc29jaWHDp8OjbyBwb3NpdGl2YSBuw6NvIHTDo28gZm9ydGUsIG1hcyBzaWduaWZpY2F0aXZhLiBPdSBzZWphLCBxdWFudG8gbWFpcyBhbGVncmUgdW1hIG3DunNpY2EsIG1haXMgcG9wdWxhciBlbGEgw6kuIAoKTm8gZ3LDoWZpY28gYWNpbWEgYWxndW1hcyBtw7pzaWNhcyBmb2dlbSBhIGVzdGEgcmVncmEuIMOJIHBvc3PDrXZlbCBvYnNlcnZhciBxdWUgZXhpc3RlbSBtw7pzaWNhcyBtYWlzIGFsZWdyZXMgY29tIHVtYSBiYWl4YSBwb3B1bGFyaWRhZGUsIGUgbcO6c2ljYXMgbWFpcyB0cmlzdGVzIGNvbSB1bWEgcG9wdWxhcmlkYWRlIHJhem/DoXZlbC4gVmFtb3MgZXhhbWluYXIgbWFpcyBkZSBwZXJ0byBhcyBtw7pzaWNhcyBtYWlzIHBvcHVsYXJlcy4KCiMjIENvbW8gw6kgYSB2YWzDqm5jaWEgZGFzIDEwIG3DunNpY2FzIG1haXMgcG9wdWxhcmVzPwoKYGBge3Igd2FybmluZz1GQUxTRX0KbXVzaWNhcyAlPiUgCiAgICBhcnJhbmdlKC10cmFja19wb3B1bGFyaXR5KSAlPiUgCiAgICBzbGljZShjKDE6MTApKSAlPiUgCiAgICBwbG90X2x5KHggPSB+dmFsZW5jZSwKICAgICAgICAgICAgeSA9IH50cmFja19uYW1lLAogICAgICAgICAgICB0ZXh0ID0gfnZhbGVuY2UsCiAgICAgICAgICAgIHRleHRwb3NpdGlvbiA9ICdhdXRvJywKICAgICAgICAgICAgdHlwZSA9ICdiYXInKSAlPiUgCiAgICBsYXlvdXQodGl0bGUgPSAiVmFsw6puY2lhIGRhcyAxMCBtw7pzaWNhcyBtYWlzIHBvcHVsYXJlcyIsCiAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpLCAKICAgICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiVmFsw6puY2lhIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpKSwKICAgICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTcO6c2ljYSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlZm9udCA9IGxpc3Qoc2l6ZSA9IDEyKSkpCgpgYGAKCk9ic2VydmFuZG8gYXMgMTAgbWFpcyBwb3B1bGFyZXMsIHZlbW9zIHF1ZSBhIG1haW9yaWEgZGVsYXMgc8OjbyBtYWlzIGFsZWdyZXMsIGRlIGFjb3JkbyBjb20gbyB2YWxvciBkZSB2YWzDqm5jaWEuIFBvcsOpbSwgYSBtw7pzaWNhIEhhcHB5LCBwb3NzdWkgdW0gdmFsb3IgbXVpdG8gYmFpeG8gZGUgdmFsw6puY2lhLCBvdSBzZWphLCDDqSB1bWEgbcO6c2ljYSB0cmlzdGUsIGUgYWluZGEgZXN0w6EgZW50cmUgYXMgMTAgY29tIG1haW9yIHBvcHVsYXJpZGFkZS4gCgpIw6EgYWxndW1hcyBjdXJpb3NpZGFkZXMgcXVlIHZhbGVtIGEgcGVuYSBzZXIgYXBvbnRhZGFzIG5lc3RhIG3DunNpY2EuIFBlbG8gdMOtdHVsbywgc2VtIG91dmlyIGEgbcO6c2ljYSwgcG9kZXLDrWFtb3MgYXNzdW1pciBxdWUgYSBtw7pzaWNhIHNlcmlhIG1haXMgYWxlZ3JlIGUgcG9zc3VpcmlhIHVtIHZhbG9yIG1haW9yIGRlIHZhbMOqbmNpYSwgbWFzIG7Do28gw6kgbyBxdWUgYWNvbnRlY2UgYXF1aS4gQSBtw7pzaWNhIHBvc3N1aSB2YWzDqm5jaWEgZGUgMC4wODg1LCBlLCBhbyBvdXZpciBhIG3DunNpY2EsIHBlcmNlYmUtc2UgbyBwb3JxdcOqLiBUcmF0YS1zZSBkZSB1bWEgZGFzIGJhbGFkYXMgZGEgY2FycmVpcmEgZGEgY2FudG9yYSwgZSBmb2kgYSBzZWd1bmRhIG3DunNpY2EgbGFuw6dhZGEgZGUgc2V1IHRlcmNlaXJvIGRpc2NvLCAqRlJPT1QqLiBBcXVpLCBtYWlzIHVtYSB2ZXosIE1hcmluYSBmb2dlIGRvIGNsaWNow6ouIEEgbcO6c2ljYSBIYXBweSwgZGUgbWVsb2RpYSB0cmlzdGUsIGZhbGEgc2ltIHNvYnJlIGZlbGljaWRhZGUsIG1hcyBkZSB1bWEgZm9ybWEgdHJpc3RlLCBvIHF1ZSBjYWl1IG5vIGdvc3RvIGRlIHNldXMgb3V2aW50ZXMsIGUgZmV6IGRlc3NhIHVtYSBkYXMgbcO6c2ljYXMgbWFpcyBwb3B1bGFyZXMgZGEgY2FycmVpcmEgZGEgY2FudG9yYS4gCgojIFF1YWlzIGRvcyDDoWxidW5zIGRhIGNhbnRvcmEgcG9kZSBzZXIgY29uc2lkZXJhZG8gbyBtYWlzIHRyaXN0ZSBkZSBzdWEgY2FycmVpcmE/IEUgbyBtYWlzIGZlbGl6PwoKQXF1aSBub3ZhbWVudGUgcG9kZW1vcyB1c2FyIGEgdmFsw6puY2lhIGRhcyBtw7pzaWNhcyBlbSBub3NzbyBmYXZvciwgbWFzIG5lc3NlIGNhc28gcHJlY2lzYXJlbW9zIGRlIHVtIHZhbG9yIHBhcmEgbyDDoWxidW0uIFZhbW9zIHV0aWxpemFyIGEgbWVkaWFuYSBkYSB2YWzDqm5jaWEgZW50cmUgYXMgbcO6c2ljYXMgZGUgdW0gbWVzbW8gw6FsYnVtIGNvbW8gYSB2YWzDqm5jaWEgZGVzdGUgw6FsYnVtLiBFc2NvbGhlcmVtb3MgYSBtZWRpYW5hLCBwb2lzIGEgbWVzbWEgbsOjbyDDqSBhZmV0YWRhIHBvciB2YWxvcmVzIGV4dHJlbW9zLCBlIHJlcHJlc2VudGEgbyB2YWxvciBxdWUgZGl2aWRlIGFzIG9ic2VydmHDp8O1ZXMgZW0gZHVhcyBwYXJ0ZXMgaWd1YWlzOiB1bWEgYXBlbmFzIGNvbSB2YWxvcmVzIG1lbm9yZXMgcXVlIGEgbWVkaWFuYSwgZSBvdXRyYSBjb20gdmFsb3JlcyBtYWlvcmVzLiAKCmBgYHtyIHdhcm5pbmc9RkFMU0V9Cm11c2ljYXMgJT4lIAogICAgZ3JvdXBfYnkoYWxidW1fbmFtZSkgJT4lIAogICAgc3VtbWFyaXNlKG1lZGlhbmEgPSBtZWRpYW4odmFsZW5jZSkpICU+JSAKICAgIG11dGF0ZSh2YWxlbmNlX2FsYnVtID0gbWVkaWFuYSkgJT4lIAogICAgdW5ncm91cCgpICU+JSAKICAgIHNlbGVjdChhbGJ1bV9uYW1lLCB2YWxlbmNlX2FsYnVtKSAlPiUgCiAgICBwbG90X2x5KHggPSB+dmFsZW5jZV9hbGJ1bSwKICAgICAgICAgICAgeSA9IH5hbGJ1bV9uYW1lLCAKICAgICAgICAgICAgY29sb3IgPSB+YWxidW1fbmFtZSwKICAgICAgICAgICAgdGV4dCA9IH5wYXN0ZSgnVmFsw6puY2lhOiAnLCB2YWxlbmNlX2FsYnVtKSwKICAgICAgICAgICAgdHlwZSA9ICdiYXInKSAlPiUgCiAgICBsYXlvdXQodGl0bGUgPSAiVmFsw6puY2lhIHBvciDDoWxidW0iLAogICAgICAgICAgIHRpdGxlZm9udCA9IGxpc3Qoc2l6ZSA9IDEyKSwgCiAgICAgICAgICAgeGF4aXMgPSBsaXN0KHRpdGxlID0gIlZhbMOqbmNpYSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlZm9udCA9IGxpc3Qoc2l6ZSA9IDEyKSksCiAgICAgICAgICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIsOBbGJ1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlZm9udCA9IGxpc3Qoc2l6ZSA9IDEyKSkpCgpgYGAKClBlbG8gdmFsb3IgZGEgbWVkaWFuYSBkZSB2YWzDqm5jaWEgZGFzIG3DunNpY2FzIGRvIMOhbGJ1bSwgcG9kZW1vcyBjb25jbHVpciBxdWUgbyDDoWxidW0gbWFpcyBhbGVncmUgZGUgTWFyaW5hIGFuZCB0aGUgRGlhbW9uZHMgw6kgKlRoZSBGYW1pbHkgSmV3ZWxzKiwgc2V1IGRlYnV0LCBlIG8gbWFpcyB0cmlzdGUgw6kgKkVsZWN0cmEgSGVhcnQqLgoKQXF1aSwgbWFpcyB1bWEgY29pc2EgY3VyaW9zYSBhY29udGVjZS4KCk8gw6FsYnVtICpFbGVjdHJhIEhlYXJ0KiBmb2kgbyByZXNwb25zw6F2ZWwgcG9yIGF1bWVudGFyIGEgcG9wdWxhcmlkYWRlIGRhIGNhbnRvcmEsIGUgw6kgcmVjb25oZWNpZG8gcGVsYSBmb3J0ZSBpbmZsdcOqbmNpYSBlbGV0csO0bmljYSBlIGFsdGEgZW5lcmdpYSBkYXMgbcO6c2ljYXMuIE8gcXVlIGV4cGxpY2FyaWEgZW50w6NvIHVtIHZhbG9yIHTDo28gYmFpeG8gZGUgdmFsw6puY2lhPwoKVmFtb3MsIGluaWNpYWxtZW50ZSwgdmVyIGEgdmFsw6puY2lhIGRhcyBtw7pzaWNhcyBkbyDDoWxidW0uCgpgYGB7ciB3YXJuaW5nPUZBTFNFfQptdXNpY2FzICU+JSAKICAgIGZpbHRlcihhbGJ1bV9uYW1lID09ICJFbGVjdHJhIEhlYXJ0IikgJT4lCiAgICBwbG90X2x5KHggPSB+dmFsZW5jZSwKICAgICAgICAgICAgeSA9IH50cmFja19uYW1lLAogICAgICAgICAgICBjb2xvciA9IH52YWxlbmNlLAogICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCdWYWzDqm5jaWE6ICcsIHZhbGVuY2UpLAogICAgICAgICAgICBzaXplID0gfnZhbGVuY2UsIAogICAgICAgICAgICB0eXBlID0gJ3NjYXR0ZXInKSAlPiUgCiAgICBsYXlvdXQodGl0bGUgPSAiVmFsw6puY2lhIGRhcyBtw7pzaWNhcyBkbyBFbGVjdHJhIEhlYXJ0IiwKICAgICAgICAgICB0aXRsZWZvbnQgPSBsaXN0KHNpemUgPSAxMiksIAogICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJWYWzDqm5jaWEiLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZWZvbnQgPSBsaXN0KHNpemUgPSAxMikpLAogICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJNw7pzaWNhIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpKSkKCmBgYAoKQSBwYXJ0aXIgZGVzdGUgZ3LDoWZpY28gw6kgcG9zc8OtdmVsIGVudGVuZGVyIHVtIHZhbG9yIHTDo28gYmFpeG8gZGUgbWVkaWFuYSwgcG9pcyBtZXRhZGUgZGFzIG3DunNpY2FzIHBvc3N1aSB1bWEgdmFsw6puY2lhIG1lbm9yIHF1ZSAwLjQuIE1hcywgZW50cmUgZXNzYXMgbcO6c2ljYXMgZGUgYmFpeGEgdmFsw6puY2lhLCBlbmNvbnRyYW0tc2UgbcO6c2ljYXMgbWFpcyBhZ2l0YWRhcywgY29tIGZvcnRlIGluZmx1w6puY2lhIGVsZXRyw7RuaWNhLiBBdMOpIHF1ZSBwb250byBhIGVuZXJnaWEgZGUgdW1hIG3DunNpY2EgaW5mbHXDqm5jaWEgc3VhIHZhbMOqbmNpYT8KCiMjIEV4aXN0ZSBhbGd1bWEgcmVsYcOnw6NvIGVudHJlIGEgZW5lcmdpYSBkZSB1bWEgbcO6c2ljYSBlIHN1YSB2YWzDqm5jaWE/CgpgYGB7ciB3YXJuaW5nPUZBTFNFfQptdXNpY2FzICU+JSAKICAgIHBsb3RfbHkoeCA9IH52YWxlbmNlLCAKICAgICAgICAgICAgeSA9IH5lbmVyZ3ksCiAgICAgICAgICAgIGNvbG9yID0gfmFsYnVtX25hbWUsIAogICAgICAgICAgICB0eXBlID0gJ3NjYXR0ZXInLAogICAgICAgICAgICB0ZXh0ID0gfnBhc3RlKCdFbmVyZ2lhOiAnLCBlbmVyZ3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ03DunNpY2E6ICcsIHRyYWNrX25hbWUpKSAlPiUgCiAgICBsYXlvdXQodGl0bGUgPSAiUmVsYcOnw6NvIGVudHJlIGVuZXJnaWEgZSB2YWzDqm5jaWEgZGFzIG3DunNpY2FzIiwKICAgICAgICAgICB0aXRsZWZvbnQgPSBsaXN0KHNpemUgPSAxMiksIAogICAgICAgICAgIHhheGlzID0gbGlzdCh0aXRsZSA9ICJWYWzDqm5jaWEiLAogICAgICAgICAgICAgICAgICAgICAgICB0aXRsZWZvbnQgPSBsaXN0KHNpemUgPSAxMikpLAogICAgICAgICAgIHlheGlzID0gbGlzdCh0aXRsZSA9ICJFbmVyZ2lhIiwKICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVmb250ID0gbGlzdChzaXplID0gMTIpKSkKCmBgYAoKUGVsYSBkaXN0cmlidWnDp8OjbyBkb3MgZGFkb3MsIMOpIHBvc3PDrXZlbCB2ZXIgaWRlbnRpZmljYXIgYWxndW1hIGxpbmVhcmlkYWRlLiBWZW1vcyBxdWUgcXVhbnRvIG1haW9yIGEgZW5lcmdpYSwgbWFpb3IgYSB2YWzDqm5jaWEuIFZhbW9zLCBub3ZhbWVudGUsIHVzYXIgZGEgY29ycmVsYcOnw6NvIGxpbmVhciBwYXJhIGNsYXNzaWZpY2FyIG1lbGhvciBlc3NhIGFzc29jaWHDp8Ojby4KCmBgYHtyfQpjb3IoeCA9IG11c2ljYXMkZW5lcmd5LCBtdXNpY2FzJHZhbGVuY2UsIG1ldGhvZCA9ICJwZWFyc29uIikKYGBgCgpBIGNvcnJlbGHDp8OjbyBlbnRyZSBhcyB2YXJpw6F2ZWlzIMOpIGRlIGFwcm94aW1hZGFtZW50ZSAwLjYxLCBvdSBzZWphLCBhIGFzc29jaWHDp8OjbyDDqSBtb2RlcmFtZW50ZSBmb3J0ZSwgY29uZmlybWFuZG8gbyBxdWUgaWRlbnRpZmljYW1vcyBubyBncsOhZmljbyBhbnRlcmlvci4KCkFxdWksIHBvZGVtb3MgY29uY2x1aXIgcXVlLCBhcGVzYXIgZGEgZm9ydGUgaW5mbHXDqm5jaWEgZWxldHLDtG5pY2EgZSBkYSBhc3NvY2lhw6fDo28gZW50cmUgYSBlbmVyZ2lhIGUgYSB2YWzDqm5jaWEgZGFzIG3DunNpY2FzLCBvIMOhbGJ1bSAqRWxlY3RyYSBIZWFydCogw6kgbyBtYWlzIHRyaXN0ZSBlbnRyZSBvcyDDoWxidW5zIGRlIE1hcmluYSwgZGFkbyBxdWUgdW1hIGJvYSBwYXJ0ZSBkYXMgbcO6c2ljYXMgZG8gw6FsYnVtIHBvc3N1ZW0gdW1hIHZhbMOqbmNpYSBtYWlzIGJhaXhhIGUgYSBtZWRpZGEgdXRpbGl6YWRhIHBhcmEgbWVkaXIgYSB2YWzDqm5jaWEgZG8gw6FsYnVtIGZvaSBhIG1lZGlhbmEgZGEgdmFsw6puY2lhIGRlIHN1YXMgbcO6c2ljYXMuIA==